# link/utils.py
import string

# 0-9,大写字母加小写字母,最后一个字母Z作为填充，将不足8位的code，在记录到数据时，填充到8位
BASE62_CHARACTERS = string.digits + string.ascii_lowercase + string.ascii_uppercase
# 用于填充的字符
PADDING = BASE62_CHARACTERS[-1]
# 使用61位字符做hash映射
BASE61_CHARACTERS = BASE62_CHARACTERS[:len(BASE62_CHARACTERS)-1]
BASE = len(BASE61_CHARACTERS)

if __name__ == "__main__":
    # 导入 Django 的环境
    import django
    import sys
    import os

    # 导入django项目的根目录，可以随意导入模块
    django_root_path = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
    sys.path.insert(0, django_root_path)

    ##导入django环境，能够直接使用django的orm和cache等对象
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "tinyurl.settings")
    django.setup()
# 通过id生成code
def id_turn_to_code(num:int):
    if num == 0:
        return BASE61_CHARACTERS[0]
    arr = []
    while num:
        num, rem = divmod(num, BASE)
        arr.append(BASE61_CHARACTERS[rem])
    return ''.join(reversed(arr))


# 通过code 获取id值
def code_turn_to_id(short_code:str):
    num = 0
    for char in short_code:
        num = num * BASE + BASE61_CHARACTERS.index(char)
    return num

def test_10000(i):
    long_url = f'http://www.baidu.com/example/{i}'
    # 记录到数据库中
    obj = URLMapping(long_url=long_url)
    obj.save()
    # 通过id转成字符串
    code = id_turn_to_code(obj.pk)
    # 记录字符串原始长度
    obj.soure_code_len = len(code)
    obj.short_code = code
    obj.save()

if __name__ == '__main__':
    from api.models import URLMapping
    import threading
    set_data = set()
    for i in range(1,10001):
        test_10000(i)
